﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autocentro.Entities;
using Autocentro.Respository;
using Microsoft.Practices.Unity;

namespace Autocentro.BussinesLogic
{
    public class ClienteBL:IClienteBL
    {
        [Dependency]
        public IClienteRepository ClienteRepository { get; set; }
        public List<CLIENTE> GetAllFromClientes()
        {
            return ClienteRepository.GetAllFromClientes();
        }

        public List<CLIENTE> GetFromClienteByCriterio(string criterio)
        {
            return ClienteRepository.GetFromClienteByCriterio(criterio);
        }

        public CLIENTE GetFromClienteByID(int id)
        {
            return ClienteRepository.GetFromClienteByID(id);
        }

        public void AddCliente(CLIENTE cliente)
        {
            if(cliente.Ruc_DNI.Length > 0)
            {
                if (cliente.Ruc_DNI.Length == 8 || cliente.Ruc_DNI.Length == 11)
                {
                    var duplicidad = ClienteRepository.ValidadDuplicidad(cliente.Ruc_DNI, cliente.RazonSocial_Nombre, cliente.Id);
                    if (!duplicidad)
                    {
                        var msg = "";
                        var ok = cliente.Validate(out msg);
                        if (ok)
                        {
                            ClienteRepository.AddCliente(cliente);
                        }
                        else
                        {
                            throw new Exception(msg);
                        }
                    }
                    else
                    {
                        var error = string.Format("Ya existe un cliente con los mismos datos" + " " + "\n" + cliente.Ruc_DNI + "\n" + cliente.RazonSocial_Nombre + "\n" + cliente.Direccion + "\n" + cliente.Telefono);
                        throw new Exception(error);
                    }
                }
                else
                {
                    var error = string.Format("Longitud de RUC/DNI incorrecta");
                    throw new Exception(error);
                }
            }
            else
            {
                var error = string.Format("Ingrese un número de RUC/DNI");
                throw new Exception(error);
            }
        }

        public void UpdateCliente(CLIENTE cliente)
        {
            var duplicidad = ClienteRepository.ValidadDuplicidad(cliente.Ruc_DNI,cliente.RazonSocial_Nombre,cliente.Id);
            if (!duplicidad)
            {
                var msg= "";
                var ok = cliente.Validate(out msg);
                if (ok)
                {
                    ClienteRepository.UpdateCliente(cliente);
                }
                else
                {
                    throw new Exception(msg);
                }
            }
            else
            {
                var error = string.Format("Ya existe un cliente con los mismos datos" + " " + "\n" + cliente.Ruc_DNI + "\n" + cliente.RazonSocial_Nombre + "\n" + cliente.Direccion + "\n" + cliente.Telefono);
                throw new Exception(error);
            }
        }

        public void RemoveCleinte(int id)
        {
            ClienteRepository.RemoveCliente(id);
        }


        public CLIENTE GetFromClienteByRucDni(string rucDni)
        {
            return ClienteRepository.GetFromClienteByRucDni(rucDni);
        }


        public bool ValidadDuplicidad(string ruc_dni, string nomRazonSocial, int id)
        {
            return ClienteRepository.ValidadDuplicidad(ruc_dni, nomRazonSocial, id);
        }
    }
}
